/**
 * @author Tsai, Min Che
 */
(function($) {
	$.window = {
		zindex: {
			min: 100,
			max: 900,
			top: 100
		},
		init: function(ui) {
			var id = ui.attrs.id
			if ($('#' + id).hasClass('window')) {
				$.window.content(id, ui.content);
				$.window.top(id);
			} else {
				$('#workspace').prepend(ui.view);
				$.window.content(id, ui.content);
				$.window.top(id);
				$('#' + id).draggable({
					//containment: '#workspace',
					handle: '.window_head'
				});
				$('#' + id).resizable({
					animate: true,
					ghost: true,
					autoHide: true,
					handles: 'n, e, s, w, ne, se, sw, nw',
					minWidth: $('#workspace').width() * ui.attrs.size.min_width / 100,
					minHeight: $('#workspace').height() * ui.attrs.size.min_height / 100
				});
				$('#' + id).click(function() {
					$.window.top(id);
				});
				$('#' + id).find('.ui-icon-minusthick').click(function() {
					$.window.minimize(id);
				});
				$('#' + id + ' .ui-icon-plusthick').toggle(function() {
					$.window.maximize(id);
				}, function() {
					$.window.maximize(id, true);
				});
				$('#' + id + ' .ui-icon-closethick').click(function() {
					$.window.close(id);
				});
				$.workbar.addWork({
					id: id,
					icon: ui.attrs.icon,
					text: ui.attrs.title,
					click: function() {
						$.window.top(id);
					}
				});
			}
		},
		content: function(id, content) {
			$('#' + id + ' > .window_body').addClass('window_body_loaded');
			$('#' + id + ' > .window_body').html(content).show();
		},
		top: function(id) {
			if ($('#' + id).hasClass('window')) {
				if (this.zindex.top < this.zindex.max) {
					this.zindex.top++;
					$('#' + id).css('zIndex', this.zindex.top);
				} else {
					this.zindex.top = this.zindex.min;
					$('.window').each(
						function() {
							$(this).css('zIndex', $.window.zindex.min);
						}
					);
					$('#' + id).css('zIndex', this.zindex.top + 1);
				}
				$.workbar.setWorking(id);				
				$('#workspace').find('.window_head').removeClass('focus');
				$('#' + id).find('.window_head').addClass('focus');
			}
		},
		setPos: function(id, pos) {
			if ($('#' + id).hasClass('window')) {
				if (typeof pos.x != 'undefined') {
					pos_x = pos.x;
					$.window.setPosX(id, pos_x);
				}
				if (typeof pos.y != 'undefined') {
					pos_y = pos.y;
					$.window.setPosY(id, pos_y);
				}
			}
		},
		setPosX: function(id, pos_x) {
			if ($('#' + id).hasClass('window')) {
				$('#' + id).css('left', parseInt(pos_x, 10));
			}
		},
		setPosY: function(id, pos_y) {
			if ($('#' + id).hasClass('window')) {
				$('#' + id).css('top', parseInt(pos_y, 10));
			}
		},
		minimize: function(id, cancel) {
			if ($('#' + id).hasClass('window')) {
				//$('#' + id).hide();
			}
		},
		maximize: function(id, cancel) {
			if ($('#' + id).hasClass('window')) {
				cancel = true === cancel;
				if (!cancel) {
					$.window.top(id);
					oAttrs = {
						'oWidth': $('#' + id).width(),
						'oHeight': $('#' + id).height(),
						'oPos': $('#' + id).position()
					};
					$('#' + id).animate({
						'left': 0,
						'top': 0,
						'width': '100%',
						'height': $('#workspace').height() - $('#workbar').height() * 2
					});
					/*$('#' + id).animate({
						'left': 0,
						'top': 0
					}).animate({
						'width': '100%'
					}).animate({
						'height': $('#workspace').height()
					});*/
				} else {
					$.window.top(id);
					$('#' + id).animate({
						'width': oAttrs.oWidth,
						'height': oAttrs.oHeight,
						'left': oAttrs.oPos.left,
						'top': oAttrs.oPos.top
					});
				}
			}
		},
		close: function(id) {
			if ($('#' + id).hasClass('window')) {
				$('#' + id).remove();
				$.workbar.removeWork(id);
			}
		},
		exists: function(id) {
			return $('#' + id).hasClass('window');
		}
	};
	$.fn.window = function(action, options) {
		id = $(this).attr('id');
		switch (action) {
			case 'pos':
				$.window.setPos(id, options);
				break;
			case 'minimize':
				$.window.minimize(id, options);
				break;
			case 'maximize':
				$.window.maximize(id, options);
				break;
			case 'close':
				$.window.close(id);
				break;
			case 'top':
			default:
				$.window.top(id);
				break;
		}
	};
})(jQuery);